package String.easy;


/**
 * 1.问题描述
 *      给你一个整数 n，请你返回一个含 n 个字符的字符串，其中每种字符在该字符串中都恰好出现 奇数次 。
 *      返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串，则返回其中任意一个即可。
 *
 *
 *
 * 2.算法分析
 *      /*
 *             本题可以转化为正整数n的奇数分解：
 *                 n = n1 + n2 + ... + nk
 *             如果n<=26,直接按照字母表的顺序拼接即可，当n > 26时，这种方式就不行了，我们想办法将n华为两个
 *             较小的正整数。
 *             假设n = n1 + n2，我们考虑将长度为n的字符串转化为两个长度为n1和n2的字符串，在将两个字符串拼接起来a
 *             考虑使用递归的方式解决此题。
 *             假设n = 500
 *             n = 101 + 49 + 101 + 49 + 1 + 99
 *             采用试探法
 *             如果我们先加一个字符到新的字符串中
 *             假设A[s]记录的是第s划分A[0]=n
 *             A[s-1]与A[s]之间的
 *
 *             如何考虑n的分解?
 *             划归为数学模型：
 *                 n = n1 + n2 + ... + nk(分解可能不唯一)
 *             但是我们需要保证划分的k<=26
 *
 *             想复杂了，当n为奇数，直接拼接n个相同字符即可，如果n为偶数 n = (n-1) + 1
 *         */


@SuppressWarnings("all")
public class 生成每种字符都是奇数个的字符串 {

    public static void main(String[] args) {

    }

    public static String generateTheString(int n) {
        if(n == 0) {
            return "";
        }
        if(n == 1) {
            return "a";
        }
        StringBuilder builder = new StringBuilder(); // 创建一个新的字符串
        if(n % 2 == 0) { // 说明n为偶数
            for(int i = 0; i < n-1;i++) {
                builder.append("a");
            }
            builder.append("b");
            return builder.toString();
        } else{
            for(int i = 0; i < n; i++) {
                builder.append("a");
            }
        }
        return builder.toString();
    }

    // 简化上述代码：使用三元表达式
    public static String test(int n) {

        return null;
    }
}
